package com.hotelsystem.service;

import com.hotelsystem.pojo.OrderDetail;
import com.hotelsystem.pojo.Orders;
import org.apache.ibatis.annotations.Param;

import java.sql.Timestamp;
import java.util.List;
import java.util.Map;

public interface OrdersService {

    /**
     * 按条件查询全部订单信息及明细信息
     * @param map 条件集合
     * @return
     * @throws Exception
     */
    List<Orders> list(Map<String,Object> map) throws Exception;

    /**
     * 取消预定
     * 1.修改房型相关信息和房间的状态
     * 2.按状态名称查询出状态编号
     * 3.修改订单状态
     * @param roomId 房间号
     * @param roomTypeId 房型号
     * @param ordersId 订单编号
     * @param statusName 状态名称
     * @return
     * @throws Exception
     */
    Integer updateOrderStatus(String roomId,Integer roomTypeId,String ordersId, String statusName) throws Exception;

    /**
     * 添加订单
     * 1.根据身份证号查询用户是否存在，不存在则添加,存在不添加
     * 2.修改房型信息和房间状态
     * 3.添加订单
     * 4.添加订单明细
     * @return
     * @throws Exception
     */
    Integer insert(Orders orders) throws Exception;

    /**
     * 添加订单
     * 1、根据身份证号查询用户是否存在，不存在则添加,存在不添加则修改
     * 2、根据该客户是否有预订房间来修改房型信息和房间状态
     * 3、如果该客户已经预订过房间直接修改订单信息和订单明细
     * 4、如果该客户没有预订过房间则添加订单信息和订单明细
     * @param orders
     * @return
     * @throws Exception
     */
    Integer insertCheckInRegister(Orders orders, OrderDetail orderDetail) throws Exception;

    /**
     * 删除订单
     * 1.删除订单明细
     * 2.删除订单
     * @param ordersId 订单编号
     * @return
     */
    Integer delete(String ordersId) throws Exception;

    /**
     * 根据身份证号模糊查询客户的订单信息，没有订单的客户也一并查询出来
     * @return
     * @throws Exception
     */
    List<Orders> listByOrdersStatus(String idNumber) throws Exception;

    public List<Orders> getShuJuTongJiByMoth(@Param("min") Timestamp min, @Param("max")Timestamp max);

    /**
     * 根据订单号模糊查询入住中的订单
     * @param ordersId
     * @return
     * @throws Exception
     */
    List<Orders> listByOrdersId(String ordersId) throws Exception;

    /**
     * 修改订单信息
     * @param orders
     * @return
     */
    Integer updateAll(Orders orders) throws Exception;

    /**
     * 退房
     * 1、修改房间状态为打扫中
     * 2、修改房型入住数减1
     * 3、修改订单状态为已结算离店
     * @param ordersId 订单编号
     * @param roomId 房间号
     * @param roomTypeId 房型编号
     * @return
     * @throws Exception
     */
    Integer checkOut(String ordersId,String roomId,Integer roomTypeId) throws Exception;

}